package cn.angis.common.constant;

import cn.openjava.gmsm.sm2.SM2;
import cn.openjava.gmsm.sm2.SM2KeyPair;
import cn.openjava.gmsm.sm3.SM3;

/**
 * 包名称：cn.angis.common.constant
 * 类名称：Crypto
 * 类描述：
 * 创建人：@author angis.cn
 * 创建日期： 2023/1/5 17:59
 */
public class Crypto {
    public static final String PUBLICKEY = "041DE5FBA6EDE3EAFE82212B53B14F8C03A5151E13C4CA7842FC38A434B139D9F72E0DF46B7190B189176B4556094BFDB8309D0716635F4BDB85D31600BAE3ADD5";
    public static final String PRIVATEKEY = "D1496F573E9DD9E6298DB668B447088731A13C497C194A21F67A73860A35DBFC";
    public static final String SM4KEY = "i76v52fg42d9unbvny00clz1zcdosra3";

    public static void main(String[] args) throws Exception {

//        String decryptStr = StrUtil.utf8Str(sm2.decrypt(HexUtil.encodeHexStr("044c97aadb38c56197d88deb409406a869507ab3baeb5d8232552c948fb1ea8d3f56ab7be9f4c83269e1dbbc70d227f5213d705ca1050d2d9a220d5b6cfb4abe8fe2550a755d6ad584477ffaa3b567441b807c44c1dc24322802d224730318a8302bf163bec7e4"), KeyType.PrivateKey));
//        System.out.printf("decryptStr:%s \n",decryptStr);


//         /*私钥
//          完整:308193020100301306072a8648ce3d020106082a811ccf5501822d047930770201010420
//          730895115e28d7cdbc5be77e0a2c39f690e04217b7218f7c36f27e293b7d1e51a00a06082a811ccf5501822da1440342000498024e7a2ad38f79223394aab9a30fd30be81c6c5efd307d520ff5f53d9d4bee2f7e62c843ae2c0ff448dc6e56297fda6154d5110ea246e4b692c2d3bda96949
//          拆解:
//          308193020100301306072a8648ce3d0201
//          06082a811ccf5501822d
//          047930770201010420
//          730895115e28d7cdbc5be77e0a2c39f690e04217b7218f7c36f27e293b7d1e51  //即为js私钥
//          a00a
//          06082a811ccf5501822d
//          a144
//          034200
//          0498024e7a2ad38f79223394aab9a30fd30be81c6c5efd307d520ff5f53d9d4bee2f7e62c843ae2c0ff448dc6e56297fda6154d5110ea246e4b692c2d3bda96949
//         */
//          /* 公钥
//           完整:3059301306072a8648ce3d020106082a811ccf5501822d0342000498024e7a2ad38f79223394aab9a30fd30be81c6c5efd307d520ff5f53d9d4bee2f7e62c843ae2c0ff448dc6e56297fda6154d5110ea246e4b692c2d3bda96949
//           拆解:
//           3059301306072a8648ce3d0201
//           06082a811ccf5501822d
//           034200
//    js公钥: 0498024e7a2ad38f79223394aab9a30fd30be81c6c5efd307d520ff5f53d9d4bee2f7e62c843ae2c0ff448dc6e56297fda6154d5110ea246e4b692c2d3bda96949
//         */
//           3059301306072a8648ce3d0201
//           06082a811ccf5501822d
//           034200
//           04a1109743dd39ba1c6af69fa8f3402edf4f650791f8e41547755425012d7b9d4674670c19297c2552b6004febc32cf8862e5fe43ef4dc1f17785f358f095d0290
//        // 04BA601FE569074DDFC34E4AE2925E0B62B129F0A16F8A39FA4D1BF9FE274F556695694C787CEE218F3A9575FBCEA5115019E8B469FE07444894B25A78E2914EB5B5A42BEE510B84F64D2785DD351A200B8739A0286C04B7CC314D4C57A0998250221B22D50A4285B32F6C8132799A0A5B4117EBA4E122818C
//        // 去掉前置04并且全小写 js可解密内容：
//        // ba601fe569074ddfc34e4ae2925e0b62b129f0a16f8a39fa4d1bf9fe274f556695694c787cee218f3a9575fbcea5115019e8b469fe07444894b25a78e2914eb5b5a42bee510b84f64d2785dd351a200b8739a0286c04b7cc314d4c57a0998250221b22d50a4285b32f6c8132799a0a5b4117eba4e122818c
//        // 私钥解密
//        String decryptStr = StrUtil.utf8Str(sm2.decrypt(encryptStr, KeyType.PrivateKey));
//        System.out.printf("decryptStr:%s \n",decryptStr);
//
//        // js加密内容 java解密 已做过处理
////        SM2 sm3 = SmUtil.sm2(ByteUtils.fromHexString(Crypto.PRIVATEKEY),ByteUtils.fromHexString(Crypto.PUBLICKEY));
//        String jsEncryptStr ="047f0902f831e57e687b4af53667a5d579e5e95c326fe84ba33c281e2ef25816a3815b5de3cca3982cf39ef2af8eaea34bc5aa93f0a752b1db6f0cb0418138cbef0b7d4ead612e4ada36a7066352242c2ae010475a4dc24d8b49f25bd8e7e32740d2453509fc47";
//        String jsDecryptStr = StrUtil.utf8Str(sm2.decryptFromBcd(jsEncryptStr, KeyType.PrivateKey));
//
//        System.out.printf("jsDecryptStr:%s \n",jsDecryptStr);
//        //AES key
//        byte[] aesKey = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();
//        System.out.printf("aes key:%s", HexUtil.encodeHexStr(aesKey));

        SM2KeyPair sm2Keys = SM2.generateSm2Keys(false);
        String publicKey = sm2Keys.getPublicKey();
        System.out.println("SM2-公钥：" + publicKey);
        String privateKey = sm2Keys.getPrivateKey();
        System.out.println("SM2-私钥：" + privateKey);
        System.out.println(SM3.getDigest("123456"));
    }
}
